/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import exception.MovimentoInvalidoException;

/**
 *
 * @author jessica.rodrigues
 */
public class Dama implements IPeca{
    private ECor cor;

    Dama(ECor cor) {
        this.cor = cor;
    }

    @Override
    public ECor getCor() {
        return this.cor;
    }

    @Override
    public void setCor(ECor cor) {
        this.cor = cor;
    }
	
	public void validImpedimento(Tabuleiro tabuleiro, Posicao posicaoInicial, Posicao posicaoFinal) throws MovimentoInvalidoException {
		int direcao = posicaoInicial.getPosicaoX() - posicaoFinal.getPosicaoX();
		int versorX = direcao / Math.abs(direcao);
		direcao = posicaoInicial.getPosicaoY() - posicaoFinal.getPosicaoY();
		int versorY = direcao / Math.abs(direcao);
		
		boolean diagonalComPeca = false;
		int limite = posicaoFinal.getPosicaoX() - versorX;
		int j = posicaoInicial.getPosicaoY() + versorY;
		for(int i = posicaoInicial.getPosicaoX() + versorX; i != limite;  i += versorX, j += versorY) {
			IPeca peca = tabuleiro.getPeca(i, j);
			if(peca.getCor() == this.getCor()) {
				throw new MovimentoInvalidoException("Há uma peça de você no caminho da dama.");
			}else if(peca.getCor() != this.getCor()) {
				if(diagonalComPeca) {
					throw new MovimentoInvalidoException("Há duas peças do oponente no caminho da dama.");
				} else {
					diagonalComPeca = true;
				}
			}
		}
	}
	
	public void removeInimigo(Tabuleiro tabuleiro, Posicao posicaoInicial, Posicao posicaoFinal) throws MovimentoInvalidoException {
		int direcao = posicaoInicial.getPosicaoX() - posicaoFinal.getPosicaoX();
		int versorX = direcao / Math.abs(direcao);
		direcao = posicaoInicial.getPosicaoY() - posicaoFinal.getPosicaoY();
		int versorY = direcao / Math.abs(direcao);
		
		boolean diagonalComPeca = false;
		int limite = posicaoFinal.getPosicaoX() - versorX;
		int j = posicaoInicial.getPosicaoY() + versorY;
		for(int i = posicaoInicial.getPosicaoX() + versorX; i != limite;  i += versorX, j += versorY) {
			tabuleiro.setPeca(this, i, j);
		}
	}
}